import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;

/**
 * @User: vitobo
 * @Date: 2024-09-04
 * @Description:
 */

class Student{
    // 设置成public
    public int studentId;
    public int classId;
}



@WebServlet("/postParameter2")
public class PostParameter2Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 通过这个方法来处理 body 为json格式的数据
        // 直接把req 对象中的 body 完整的读取出来;
        // getInputStream
//        // 在流对象中  读多少个字节, 取决于 Content-Length
//        int length = req.getContentLength();
//        byte[] buffer = new byte[length];
//
//        InputStream inputStream = req.getInputStream();
//        inputStream.read(buffer);
//
//        // 把这个字节数组 构造成String, 打印出来
//        String body = new String(buffer, 0, length, "utf8");

        // 使用Jackson涉及到的核心对象
        ObjectMapper objectMapper = new ObjectMapper();
        // readValue就是把一个json格式的字符串转成Java对象
        objectMapper.readValue(req.getInputStream(), Student.class);

        // 1.会从body中读取出json格式的字符串
        // 2.根据第二个参数类对象, 创建Student实例
        // 3.解析上述json格式的字符串, 处理成map键值对结构;
        // 4.遍历所有键值对, 看 键的名字和Student实例的哪个属性名字匹配, 就把对应的value设置到该属性中
        // 5.返回该Student实例;
        Student student = objectMapper.readValue(req.getInputStream(), Student.class);
        System.out.println(student.studentId + ", " + student.classId);


        //resp.getWriter().write(body);
    }
}
